home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1993 / MacHack 1993.toast / MacHack™ 1987-1992 / MacHack™ '88 / Proceedings '88 / Feldt Advanced Mac Programming / SCSI Manager / SCSIcmd.c next >
Encoding:
C/C++ Source or Header  |  1988-06-16  |  3.8 KB  |  148 lines  |  [TEXT/KAHL]

  1. #include <extender.h>
  2. #include <quickdraw.h>
  3. #include "ssgSCSI.h"
  4.  
  5. EventRecord    event;                        /* event record structure instance */
  6. EventStuff    whatHappened;                /* event detail structure instance */
  7. MenuHandle    appleMenu,fileMenu,editMenu;/* handles for standard menus */
  8. MenuHandle    cmdMenu,optMenu,idMenu;        /* handles for SCSI menus */
  9. int            scuzzID = 4;                /* default SCSI ID being tested    */
  10.  
  11. main()
  12. {
  13.     int        i;
  14.     cmp = (unsigned char *)NewPtr((long)SIZE);
  15.     
  16.     XTendInit();                                /* Extender initialization routine */
  17. /*    StdMenus(&appleMenu,&fileMenu,&editMenu);    /* set up standard menus */
  18.                                                 /* build two customized menus */
  19.     printf("welcome to the wonderful world of SCSIcmd!\n");
  20.     
  21.     cmdMenu = BuildMenu(20,"\PSCSIcmds","\PReset;Get;Select;Test unit ready;Request sense;Read;Write;Inquiry;Load-Unload;Read capacity;Read header;Write header");
  22.     optMenu = BuildMenu(21,"\POptions","\PScan SCSI bus;Find tape drive");
  23.     idMenu = BuildMenu(22,"\PSCSI ID#","\P0 - often internal hard disk;1;2;3;4;5;6;(7 - the Mac itself;(-;Verbose mode");
  24.     CheckItem(idMenu,5,1);                        /* Check default scsi id (4) */
  25.  
  26.     for (i=0;i<SIZE;i++)
  27.         dat[i] = 0;
  28.         
  29.     do {                                        /* repeat until program terminates */
  30.         do {                                    /* repeat until an event occurs */      
  31.             SystemTask();                        /* allow for DA handling */                          
  32.         } while (!XTGetNextEvent(everyEvent,&event));
  33.         HandleEvent(&event,&whatHappened);      /* get event info */
  34.  
  35.         if (whatHappened.MenuNum > 0)            /* if user selected a menu item */
  36.             CMDMenu(&whatHappened);                /* handle the menu item selection */
  37.  
  38.     } while (ExitRequest(&whatHappened) == FALSE);
  39.     SCSIReset();
  40. }
  41.  
  42. int CMDMenu(ES)                            /* handles menu item selections */
  43. EventStuff    *ES;
  44. {
  45.     int            i;
  46.     int            drvList[maxDrvs];
  47.         
  48.     switch(ES->MenuNum) {
  49.         case 20:                            /* SCSI command menu is selected */
  50.             switch(ES->ItemNum) {
  51.                 case 1:                        /* SCSI reset command selected */
  52.                     SCSIReset();
  53.                     break;
  54.                 case 2:                        /* SCSI get command selected */
  55.                     SCSIGet();
  56.                     break;
  57.                 case 3:                        /* SCSI select command selected */
  58.                     SCSISelect(scuzzID);
  59.                     break;
  60.                 case 4:                        /* SCSI Test unit ready selected */
  61.                     gSC_unitReady(scuzzID);
  62.                     break;
  63.                 case 5:                        /* SCSI Request sense selected */
  64.                     gSC_reqSense(scuzzID);
  65.                     break;
  66.                 case 6:                        /* SCSI read command selected */
  67.                     /*gSC_read(scuzzID);*/
  68.                     break;
  69.                 case 7:                        /* SCSI write command selected */
  70.                     /*gSC_write(scuzzID);*/
  71.                     break;
  72.                 case 8:                        /* SCSI Inquiry command selected */
  73.                     gSC_inquire(scuzzID);
  74.                     break;
  75.                 case 9:                        /* SCSI Load/Unload command selected */
  76.                     gSC_loadUnload(scuzzID);
  77.                     break;
  78.                 case 10:                    /* SCSI Read capacity command selected */
  79.                     /*gSC_rdCapacity(scuzzID);*/
  80.                     break;
  81.             }
  82.             break;
  83.         case 21:                            /* SCSI option menu is selected */
  84.             switch(ES->ItemNum) {
  85.                 case 1:                        /* scan SCSI bus selected        */
  86.                     gSC_scan(drvList,maxDrvs);
  87.                     dump_drvList(drvList,maxDrvs);
  88.                     break;
  89.                 case 2:                        /* find tape drive selected    */
  90.                     printf("the tape drive is SCSI ID: %d\n",gSC_findTape(maxDrvs));
  91.                     break;
  92.             }
  93.             break;
  94.         case 22:
  95.             switch (ES->ItemNum) {
  96.                 case 1:
  97.                     scuzzID = 0;
  98.                     break;
  99.                 case 2:
  100.                     scuzzID = 1;
  101.                     break;
  102.                 case 3:
  103.                     scuzzID = 2;
  104.                     break;
  105.                 case 4:
  106.                     scuzzID = 3;
  107.                     break;
  108.                 case 5:
  109.                     scuzzID = 4;
  110.                     break;
  111.                 case 6:
  112.                     scuzzID = 5;
  113.                     break;
  114.                 case 7:
  115.                     scuzzID = 6;
  116.                     break;
  117.                 case 10:
  118.                     if (verbose == 0)
  119.                         verbose = 1;
  120.                     else
  121.                         verbose = 0;
  122.                     break;
  123.             }
  124.             if (ES->ItemNum < 10)
  125.                 ChckItem(ES->MenuH,ES->ItemNum);
  126.             break;
  127.     }
  128. }
  129.  
  130. int ChckItem(EMenu,item) 
  131. MenuHandle  EMenu;
  132. int         item;
  133. {
  134.     int        Eitemcount,i;
  135.     char    EItembuff[256];
  136.  
  137.     if (!ValidHandle((Handle)EMenu))
  138.         RETURN;
  139.  
  140.     Eitemcount = CountMItems(EMenu);
  141.  
  142.     for (i=0; i<=Eitemcount; i++) {
  143.         CheckItem(EMenu,i,0);
  144.     }
  145.     CheckItem(EMenu,item,1);
  146. }
  147.  
  148.